package view;

import java.awt.Color;
import java.awt.ComponentOrientation;
import java.awt.Cursor;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.InetAddress;
import java.net.Socket;
import java.net.URL;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JTextField;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;

import com.sun.rowset.CachedRowSetImpl;

import model.Libri;
import model.LibriImpl;
import utilities.BibliotecaJDBC;
import utilities.JPanel2;
import controller.ControllerAdminImpl;
import controller.ControllerClienteImpl;

public class MainView extends JFrame {

	protected ControllerAdminImpl controllerAdmin;
	protected ControllerClienteImpl controllerCliente;
	protected UtenteView utenteView;
	protected AdminView adminView;
	protected Libri libri;
	protected String password;
	private static final long serialVersionUID = 7828233369329817516L;
	private Connection conn = BibliotecaJDBC.getConnection();
	private ImageIcon sfondo = new ImageIcon("immagini/sfondogrande.jpg");
	private ImageIcon erroreIm = new ImageIcon("immagini/bookerror.png");
	private ImageIcon puntoInterrogativo = new ImageIcon(
			"immagini/puntoInterrogativo.gif");
	private Cursor cursore = new Cursor(Cursor.HAND_CURSOR);
	private Font fontLati = new Font("Lucida Handwriting", Font.BOLD, 26);
	private Color colore = new Color(255, 255, 255, 170);
	private JFrame accessoCliente, accessoAdmin;
	private JButton admin, cliente, accedi, annulla;
	private JPasswordField spazioPassAdmin, spazioPassCliente;
	private JTextField spazioIdAdmin, spazioIdCliente;
	private JPanel arrivi, arrivi1, arrivi2;
	private JPanel richiesti, richiesti1, richiesti2;
	private ImageIcon[] immaginiArrivi, immaginiPresi;
	private JLabel[] scritteArrivi, labelArrivi, scrittePresi, labelPresi;
	private JLabel scrittaArrivi, scrittaArrivi1, scrittaRichiesti,
			scrittaRichiesti1;
	private int idAccesso;
	private ObjectInputStream input;
	private ObjectOutputStream output;
	private Socket socket;
	private InetAddress addr = InetAddress.getByName(null);
	private int PORT = 1235;

	public MainView() throws SQLException, IOException {
		libri = new LibriImpl(conn);
		firstView();
		pack();
	}

	private String getPasswordAdmin() {
		char[] c = spazioPassAdmin.getPassword();
		StringBuilder s = new StringBuilder(30);
		for (int i = 0; i < c.length; i++) {
			s.append(c[i]);
		}
		return s.toString();
	}

	private String getPasswordCliente() {
		char[] c = spazioPassCliente.getPassword();
		StringBuilder s = new StringBuilder(30);
		for (int i = 0; i < c.length; i++) {
			s.append(c[i]);
		}
		return s.toString();
	}

	private class ActionListenerFirstView implements ActionListener {

		public void actionPerformed(ActionEvent e) {
			if (e.getSource() == admin) {
				accessoAdmin();
				MainView.this.setEnabled(false);
			} else if (e.getSource() == cliente) {
				accessoCliente();
				MainView.this.setEnabled(false);
			}
		}
	}

	private class ActionListenerAccessoAdmin implements ActionListener {
		@Override
		public void actionPerformed(ActionEvent e) {
			if (e.getSource() == accedi) {
				try {
					int id = Integer.parseInt(spazioIdAdmin.getText().trim());
					password = getPasswordAdmin();
					controllerAdmin.accedi(id, password);
					MainView.this.setEnabled(true);
				} catch (NumberFormatException exp) {
					JOptionPane.showMessageDialog(null, "Formato ID errato!",
							null, JOptionPane.ERROR_MESSAGE, erroreIm);
				}
			} else if (e.getSource() == annulla) {
				accessoAdmin.dispose();
				MainView.this.setEnabled(true);
				MainView.this.setVisible(true);
			}
		}
	}

	private class KeyListenerAccessoAdmin implements KeyListener {
		@Override
		public void keyTyped(KeyEvent e) {

		}

		@Override
		public void keyReleased(KeyEvent e) {

		}

		@Override
		public void keyPressed(KeyEvent e) {
			int key = e.getKeyCode();
			if (key == KeyEvent.VK_ENTER) {
				try {
					int id = Integer.parseInt(spazioIdAdmin.getText().trim());
					password = getPasswordAdmin();
					controllerAdmin.accedi(id, password);
					MainView.this.setEnabled(true);
				} catch (NumberFormatException exp) {
					JOptionPane.showMessageDialog(null, "Formato ID errato!",
							null, JOptionPane.ERROR_MESSAGE, erroreIm);
				}
			} else if (key == KeyEvent.VK_ESCAPE) {
				accessoAdmin.dispose();
				MainView.this.setEnabled(true);
				MainView.this.setVisible(true);
			}
		}

	}

	private class ActionListenerAccessoCliente implements ActionListener {
		@Override
		public void actionPerformed(ActionEvent e) {
			if (e.getSource() == accedi) {
				try {
					int id = Integer.parseInt(spazioIdCliente.getText().trim());
					String pass = getPasswordCliente();
					controllerCliente.accedi(id, pass);
					MainView.this.setEnabled(true);
				} catch (NumberFormatException exp) {
					JOptionPane.showMessageDialog(null, "Formato ID errato!",
							null, JOptionPane.ERROR_MESSAGE, erroreIm);
				}
			} else if (e.getSource() == annulla) {
				accessoCliente.dispose();
				MainView.this.setEnabled(true);
				MainView.this.setVisible(true);
			}
		}
	}

	private class KeyListenerAccessoCliente implements KeyListener {
		@Override
		public void keyTyped(KeyEvent e) {

		}

		@Override
		public void keyReleased(KeyEvent e) {

		}

		@Override
		public void keyPressed(KeyEvent e) {
			int key = e.getKeyCode();
			if (key == KeyEvent.VK_ENTER) {
				try {
					int id = Integer.parseInt(spazioIdCliente.getText().trim());
					String pass = getPasswordCliente();
					controllerCliente.accedi(id, pass);
					MainView.this.setEnabled(true);
				} catch (NumberFormatException exp) {
					JOptionPane.showMessageDialog(null, "Formato ID errato!",
							null, JOptionPane.ERROR_MESSAGE, erroreIm);
				}
			} else if (key == KeyEvent.VK_ESCAPE) {
				accessoCliente.dispose();
				MainView.this.setEnabled(true);
				MainView.this.setVisible(true);
			}
		}
	}

	private class KeyListenerMain implements KeyListener {

		@Override
		public void keyTyped(KeyEvent e) {
		}

		@Override
		public void keyReleased(KeyEvent e) {
		}

		@Override
		public void keyPressed(KeyEvent e) {
			int key = e.getKeyCode();
			if (key == KeyEvent.VK_ESCAPE) {
				if (consensoUscita()) {
					System.exit(-1);
				}
			}
		}

	}

	private void accessoAdmin() {
		accessoAdmin = new JFrame("Accesso Amministratore");
		accessoAdmin.setResizable(false);
		accessoAdmin.setAlwaysOnTop(true);
		accessoAdmin.setUndecorated(true);

		// dimensioni e locazione schermata iniziale
		Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
		int largh = accessoAdmin.getSize().width;
		int alt = accessoAdmin.getSize().height;
		accessoAdmin.setSize(600, 130);
		accessoAdmin.setLocation((dim.width - largh - 600) / 2, (dim.height
				- alt + 200) / 2);
		accessoAdmin.setVisible(true);
		accessoAdmin.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

		// organizzazione finestra
		JPanel pannello = new JPanel(new GridLayout(3, 2, 15, 15));
		accessoAdmin.add(pannello);
		JLabel id = new JLabel("ID ADMIN", JLabel.CENTER);
		pannello.add(id);
		spazioIdAdmin = new JTextField("", 15);
		pannello.add(spazioIdAdmin);
		JLabel pass = new JLabel("PASSWORD", JLabel.CENTER);
		pannello.add(pass);
		spazioPassAdmin = new JPasswordField("", 30);
		pannello.add(spazioPassAdmin);
		accedi = new JButton("Accedi");
		pannello.add(accedi);
		annulla = new JButton("Annulla");
		pannello.add(annulla);

		// listener
		ActionListenerAccessoAdmin listener = new ActionListenerAccessoAdmin();
		accedi.addActionListener(listener);
		annulla.addActionListener(listener);
		KeyListenerAccessoAdmin keylistener = new KeyListenerAccessoAdmin();
		spazioPassAdmin.addKeyListener(keylistener);
		spazioIdAdmin.addKeyListener(keylistener);
		accedi.addKeyListener(keylistener);
		annulla.addKeyListener(keylistener);

		accessoAdmin.pack();
	}

	private void accessoCliente() {
		accessoCliente = new JFrame("Accesso Cliente");
		accessoCliente.setResizable(false);
		accessoCliente.setAlwaysOnTop(true);
		accessoCliente.setUndecorated(true);

		// dimensioni e locazione schermata iniziale
		Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
		int largh = accessoCliente.getSize().width;
		int alt = accessoCliente.getSize().height;
		accessoCliente.setSize(600, 140);
		accessoCliente.setLocation((dim.width - largh - 600) / 2, (dim.height
				- alt + 200) / 2);
		accessoCliente.setVisible(true);
		accessoCliente.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

		// organizzazione finestra
		JPanel pannello = new JPanel(new GridLayout(3, 2, 15, 15));
		accessoCliente.add(pannello);
		JLabel id = new JLabel("ID CLIENTE", JLabel.CENTER);
		pannello.add(id);
		spazioIdCliente = new JTextField("", 15);
		pannello.add(spazioIdCliente);
		JLabel pass = new JLabel("PASSWORD", JLabel.CENTER);
		pannello.add(pass);
		spazioPassCliente = new JPasswordField("", 30);
		pannello.add(spazioPassCliente);
		accedi = new JButton("Accedi");
		pannello.add(accedi);
		annulla = new JButton("Annulla");
		pannello.add(annulla);

		// listener
		ActionListenerAccessoCliente listener = new ActionListenerAccessoCliente();
		accedi.addActionListener(listener);
		annulla.addActionListener(listener);
		KeyListenerAccessoCliente keylistener = new KeyListenerAccessoCliente();
		spazioPassCliente.addKeyListener(keylistener);
		spazioIdCliente.addKeyListener(keylistener);
		accedi.addKeyListener(keylistener);
		annulla.addKeyListener(keylistener);

		accessoCliente.pack();
	}

	public void accessoRiuscitoAdmin(int id) {
		idAccesso = id;
		accessoAdmin.dispose();
		this.setEnabled(true);
		this.setVisible(false);
		adminView = new AdminView(this, controllerAdmin);
	}

	public void accessoRiuscitoCliente(int id) {
		idAccesso = id;
		accessoCliente.dispose();
		this.setEnabled(true);
		this.setVisible(false);
		utenteView = new UtenteView(this, controllerCliente);
	}

	public void erroreComunicazioneAdmin(boolean socket) {
		if (socket) {
			JOptionPane.showMessageDialog(null,

			"Errore di comunicazione col Database ", null,
					JOptionPane.ERROR_MESSAGE, erroreIm);
		} else {
			int option = JOptionPane.showConfirmDialog(null,
					"Sei Disconnesso . Vuoi Riconnetterti?", "Exit Message",
					JOptionPane.YES_NO_OPTION, JOptionPane.YES_NO_OPTION,
					puntoInterrogativo);
			if (option == JOptionPane.YES_OPTION) {

				controllerAdmin.accedi(getIdAccesso(), getPasswordAccesso());
			}

		}

	}

	public void erroreComunicazioneUtente(boolean socket) {
		if (socket) {
			JOptionPane.showMessageDialog(null,

			"Errore di comunicazione col Database ", null,
					JOptionPane.ERROR_MESSAGE, erroreIm);
		} else {
			int option = JOptionPane.showConfirmDialog(null,
					"Sei Disconnesso . Vuoi Riconnetterti?", "Exit Message",
					JOptionPane.YES_NO_OPTION, JOptionPane.YES_NO_OPTION,
					puntoInterrogativo);
			if (option == JOptionPane.YES_OPTION) {
				controllerCliente.accedi(getIdAccesso(), getPasswordAccesso());
			}

		}

	}

	public void accessoNegato() {
		JOptionPane.showMessageDialog(null, "Password errata!", null,
				JOptionPane.ERROR_MESSAGE, erroreIm);
	}

	public void datiErrati() {
		JOptionPane.showMessageDialog(null, "Dati errati. Riprovare...", null,
				JOptionPane.ERROR_MESSAGE, erroreIm);
	}

	private void firstView() {
		this.setTitle("La nostra biblioteca");
		this.setSize(new Dimension(1366, 730));
		this.setPreferredSize(new Dimension(1366, 730));
		this.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
		this.setFocusable(true);
		this.setResizable(false);

		this.addWindowListener(new WindowAdapter() {
			public void windowClosing(WindowEvent e) {
				if (consensoUscita())
					System.exit(-1);
			}
		});

		JPanel pannello = new JPanel2(sfondo.getImage());
		pannello.setOpaque(true);
		pannello.setFocusable(true);
		pannello.setLayout(new GridLayout(4, 4));
		pannello.setComponentOrientation(ComponentOrientation.LEFT_TO_RIGHT);
		this.add(pannello);

		// prima riga
		JButton spazio1 = new JButton();
		JButton spazio2 = new JButton();
		JButton spazio3 = new JButton();
		JButton spazio4 = new JButton();
		pannello.add(spazio1);
		pannello.add(spazio2);
		pannello.add(spazio3);
		pannello.add(spazio4);
		spazio1.setVisible(false);
		spazio2.setVisible(false);
		spazio3.setVisible(false);
		spazio4.setVisible(false);

		// seconda riga
		richiesti = new JPanel(new GridLayout(2, 1));
		JButton spazio5 = new JButton();
		JButton spazio6 = new JButton();
		arrivi = new JPanel(new GridLayout(2, 1));
		pannello.add(richiesti);
		pannello.add(spazio5);
		pannello.add(spazio6);
		pannello.add(arrivi);
		richiesti.setBackground(colore);
		richiesti.setOpaque(true);
		arrivi.setBackground(colore);
		arrivi.setOpaque(true);
		spazio5.setVisible(false);
		spazio6.setVisible(false);

		// terza riga
		richiesti1 = new JPanel(new GridLayout(2, 1));
		JButton spazio7 = new JButton();
		JButton spazio8 = new JButton();
		arrivi1 = new JPanel(new GridLayout(2, 1));
		pannello.add(richiesti1);
		pannello.add(spazio7);
		pannello.add(spazio8);
		pannello.add(arrivi1);
		richiesti1.setBackground(colore);
		richiesti1.setOpaque(true);
		arrivi1.setBackground(colore);
		arrivi1.setOpaque(true);
		spazio7.setVisible(false);
		spazio8.setVisible(false);

		// quarta riga
		richiesti2 = new JPanel(new GridLayout(2, 1));
		ImageIcon iconAdmin = new ImageIcon("immagini/ammin.png");
		ImageIcon iconCliente = new ImageIcon("immagini/user.png");
		arrivi2 = new JPanel(new GridLayout(2, 1));

		admin = new JButton(iconAdmin);
		cliente = new JButton(iconCliente);
		admin.setToolTipText("Accedi come amministratore");
		cliente.setToolTipText("Accedi come cliente");
		admin.setFocusable(true);
		cliente.setFocusable(true);
		admin.setCursor(cursore);
		cliente.setCursor(cursore);
		admin.setBorder(null);
		admin.setContentAreaFilled(false);
		cliente.setBorder(null);
		cliente.setContentAreaFilled(false);

		richiesti2.setBackground(colore);
		richiesti2.setOpaque(true);
		arrivi2.setBackground(colore);
		arrivi2.setOpaque(true);
		pannello.add(richiesti2);
		pannello.add(admin);
		pannello.add(cliente);
		pannello.add(arrivi2);

		// listener
		ActionListenerFirstView listener = new ActionListenerFirstView();
		admin.addActionListener(listener);
		cliente.addActionListener(listener);
		KeyListenerMain keylistener = new KeyListenerMain();
		this.addKeyListener(keylistener);
		admin.addKeyListener(keylistener);
		cliente.addKeyListener(keylistener);

		// lati
		ultimiArrivi();
		ultimiPresi();

		this.setVisible(true);
	}

	private boolean consensoUscita() {
		int option = JOptionPane.showConfirmDialog(null,
				"Sicuro di voler uscire ?", "Exit Message",
				JOptionPane.YES_NO_OPTION, JOptionPane.YES_NO_OPTION,
				puntoInterrogativo);
		return option == JOptionPane.YES_OPTION;
	}// consensoUscita

	public void rendiVisibile() {
		richiesti.removeAll();
		richiesti1.removeAll();
		richiesti2.removeAll();
		arrivi.removeAll();
		arrivi1.removeAll();
		arrivi2.removeAll();
		ultimiArrivi();
		ultimiPresi();
		this.setVisible(true);
	}

	private void ultimiPresi() {
		int pos = 0;

		// JPanel richiesti
		scrittaRichiesti = new JLabel("Ultimi ", JLabel.RIGHT);
		scrittaRichiesti.setFont(fontLati);
		scrittaRichiesti.setForeground(Color.BLUE);
		richiesti.add(scrittaRichiesti);
		scrittaRichiesti1 = new JLabel("presi", JLabel.LEFT);
		scrittaRichiesti1.setFont(fontLati);
		scrittaRichiesti1.setForeground(Color.BLUE);
		richiesti.add(scrittaRichiesti1);
		try {
			socket = new Socket(addr, PORT);
			output = new ObjectOutputStream(socket.getOutputStream());
			input = new ObjectInputStream(socket.getInputStream());
			output.writeObject("getUltimiPresi");
			output.flush();
			CachedRowSetImpl crs = (CachedRowSetImpl) input.readObject();
			ResultSet rs = crs.getOriginal();
			immaginiPresi = new ImageIcon[5];
			scrittePresi = new JLabel[5];
			labelPresi = new JLabel[5];
			while (rs.next() && pos < 5) {
				output.writeObject("getInfoLibro_" + rs.getLong(1));
				output.flush();
				CachedRowSetImpl crs1 = (CachedRowSetImpl) input.readObject();
				ResultSet t = crs1.getOriginal();
				t.next();
				String url = t.getString(3);
				if (!url.equals("null")) {
					URL link = new URL(url);
					immaginiPresi[pos] = new ImageIcon(link);
					Image x = immaginiPresi[pos].getImage();
					x = x.getScaledInstance(100, 150, Image.SCALE_DEFAULT);
					immaginiPresi[pos].setImage(x);
				} else {
					immaginiPresi[pos] = new ImageIcon(
							"libri/NonDisponibile.gif");
				}
				StringBuilder sb = new StringBuilder();
				sb.append("<html><p align=''center''>");
				sb.append(t.getString(1));
				sb.append("<br> di ");
				sb.append(t.getString(2));
				sb.append("</p></html>");
				scrittePresi[pos] = new JLabel(sb.toString(), JLabel.CENTER);
				labelPresi[pos] = new JLabel(immaginiPresi[pos], JLabel.CENTER);
				scrittePresi[pos].setFont(new Font("Comic Sans Ms",
						Font.ITALIC, 16));
				scrittePresi[pos].setForeground(Color.blue);
				if (pos == 0) {
					richiesti.add(labelPresi[pos]);
					richiesti.add(scrittePresi[pos]);
				} else if (pos == 1 || pos == 2) {
					richiesti1.add(labelPresi[pos]);
					richiesti1.add(scrittePresi[pos]);
				} else if (pos == 3 || pos == 4) {
					richiesti2.add(labelPresi[pos]);
					richiesti2.add(scrittePresi[pos]);
				}
				pos++;
			}
			socket.close();
		} catch (SQLException e) {
			erroreComunicazioneMain();
		} catch (NullPointerException e) {
			System.out.println("Immagini non presenti");
		} catch (IOException ex) {
			erroreComunicazioneMain();
		} catch (ClassNotFoundException e) {
			erroreComunicazioneMain();
		}

		if (pos == 0) {
			JButton n = new JButton();
			richiesti.add(n);
			n.setVisible(false);
		}
		if (pos == 2) {
			JButton n = new JButton();
			richiesti1.add(n);
			n.setVisible(false);
		} else if (pos == 4) {
			JButton n1 = new JButton();
			richiesti2.add(n1);
			n1.setVisible(false);
		}
	}

	private void ultimiArrivi() {
		int pos = 0;

		// JPanel arrivi
		scrittaArrivi = new JLabel("Ultimi ", JLabel.RIGHT);
		scrittaArrivi.setFont(fontLati);
		scrittaArrivi.setForeground(Color.RED);
		arrivi.add(scrittaArrivi);
		scrittaArrivi1 = new JLabel("arrivi", JLabel.LEFT);
		scrittaArrivi1.setFont(fontLati);
		scrittaArrivi1.setForeground(Color.RED);
		arrivi.add(scrittaArrivi1);
		try {
			socket = new Socket(addr, PORT);
			output = new ObjectOutputStream(socket.getOutputStream());
			input = new ObjectInputStream(socket.getInputStream());
			output.writeObject("getUltimiArrivi");
			output.flush();
			CachedRowSetImpl crs = (CachedRowSetImpl) input.readObject();
			ResultSet rs = crs.getOriginal();
			immaginiArrivi = new ImageIcon[5];
			scritteArrivi = new JLabel[5];
			labelArrivi = new JLabel[5];
			while (rs.next() && pos < 5) {
				String url = rs.getString(3);
				if (!url.equals("null")) {
					URL link = new URL(url);
					immaginiArrivi[pos] = new ImageIcon(link);
					Image x = immaginiArrivi[pos].getImage();
					x = x.getScaledInstance(100, 150, Image.SCALE_DEFAULT);
					immaginiArrivi[pos].setImage(x);
				} else {
					immaginiArrivi[pos] = new ImageIcon(
							"libri/NonDisponibile.gif");
				}
				StringBuilder sb = new StringBuilder();
				sb.append("<html><p align=''center''>");
				sb.append(rs.getString(1));
				sb.append("<br> di ");
				sb.append(rs.getString(2));
				sb.append("</p></html>");
				scritteArrivi[pos] = new JLabel(sb.toString(), JLabel.CENTER);
				scritteArrivi[pos].setFont(new Font("Comic Sans Ms",
						Font.ITALIC, 16));
				scritteArrivi[pos].setForeground(Color.RED);
				labelArrivi[pos] = new JLabel(immaginiArrivi[pos],
						JLabel.CENTER);
				if (pos == 0) {
					arrivi.add(labelArrivi[pos]);
					arrivi.add(scritteArrivi[pos]);
				} else if (pos == 1 || pos == 2) {
					arrivi1.add(labelArrivi[pos]);
					arrivi1.add(scritteArrivi[pos]);
				} else if (pos == 3 || pos == 4) {
					arrivi2.add(labelArrivi[pos]);
					arrivi2.add(scritteArrivi[pos]);
				}
				pos++;
			}
			socket.close();
		} catch (SQLException e) {
			erroreComunicazioneMain();
		} catch (NullPointerException e) {
			System.out.println("Immagini non presenti");
		} catch (IOException ex) {
			erroreComunicazioneMain();
		} catch (ClassNotFoundException e) {
			erroreComunicazioneMain();
		}

		if (pos == 0) {
			JButton n = new JButton();
			arrivi.add(n);
			n.setVisible(false);
		} else if (pos == 2) {
			JButton n = new JButton();
			arrivi1.add(n);
			n.setVisible(false);
		} else if (pos == 4) {
			JButton n = new JButton();
			arrivi2.add(n);
			n.setVisible(false);
		}
	}

	public int getIdAccesso() {
		return idAccesso;
	}

	public String getPasswordAccesso() {
		return password;
	}

	private void setControllerAdmin(ControllerAdminImpl c) {
		this.controllerAdmin = c;
	}

	private void setControllerCliente(ControllerClienteImpl c) {
		this.controllerCliente = c;
	}

	public AdminView getAdminView() {
		return adminView;
	}

	public UtenteView getUtenteView() {
		return utenteView;
	}

	public void erroreComunicazioneMain() {
		JOptionPane.showMessageDialog(null,
				"Connessione al server non stabilita!", null,
				JOptionPane.ERROR_MESSAGE, erroreIm);
	}

	public static void main(String[] args) throws SQLException, IOException {
		final MainView m = new MainView();
		ControllerAdminImpl controllerAd = new ControllerAdminImpl(m);
		ControllerClienteImpl controllerCl = new ControllerClienteImpl(m);
		m.setControllerAdmin(controllerAd);
		m.setControllerCliente(controllerCl);
		java.awt.EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					UIManager
							.setLookAndFeel("com.easynth.lookandfeel.EaSynthLookAndFeel");
				} catch (ClassNotFoundException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				} catch (InstantiationException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				} catch (IllegalAccessException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				} catch (UnsupportedLookAndFeelException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				m.setVisible(true);
			}
		});
	}
}